Non-volatile memory devices, such as universal serial bus (USB) flash memory devices or removable storage cards, have allowed for increased portability of data and software applications. Flash memory devices can enhance data storage density and cost efficiency by storing multiple bits in each flash memory cell.
Storing multiple bits of information in a single flash memory cell typically includes mapping sequences of bits to states of the flash memory cell. After determining that a sequence of bits is to be stored into a particular flash memory cell, the flash memory cell may be programmed to a state corresponding to the sequence of bits. Programming the flash memory cell with a small programming step size may increase programming accuracy but may increase a number of programming steps, thereby increasing programming latency. Programming the flash memory cell with a large programming step size may decrease the number of programming steps, thereby decreasing programming latency, but may decrease programming accuracy. Once the memory cells in the memory device have been programmed, data may be read from the memory cells by sensing the programming state of the memory cells.